package salvarcasodetestes;

import java.io.File;
import java.util.LinkedList;

import dao.ConcreteDaoCasosDeTeste;
import dao.DAOCasosDeTeste;
import entidadesparaguardardadosteste.CasoDeTeste;
import entidadesparaguardardadosteste.SuiteDeTestes;

public class FachadaParaDadosDeSuitesDeTestes implements InterfaceFachadaParaDadosDeSuiteDeTestes
{
	private DAOCasosDeTeste salvaCasosDeTestes;
	private static FachadaParaDadosDeSuitesDeTestes singletonFachadaDaoCasosDeTestes;
	
	private FachadaParaDadosDeSuitesDeTestes()
	{
		salvaCasosDeTestes = new ConcreteDaoCasosDeTeste();
	}
	
	public synchronized static FachadaParaDadosDeSuitesDeTestes getInstance()
	{
		if(singletonFachadaDaoCasosDeTestes == null)
		{
			singletonFachadaDaoCasosDeTestes = new FachadaParaDadosDeSuitesDeTestes();
		}
		
		return singletonFachadaDaoCasosDeTestes;
	}
	
	public void escreverSuiteDeTeste(LinkedList<CasoDeTeste> casosDeTesteDaSuite, String nomeSuite)
	{
		this.salvaCasosDeTestes.escreverSuiteDeTeste(casosDeTesteDaSuite, nomeSuite);
	}
	public SuiteDeTestes lerSuiteDeTeste(String nomeSuiteDeTestes)
	{
		return this.salvaCasosDeTestes.lerSuiteDeTeste(nomeSuiteDeTestes);
	}
	
	/**
	 * lista as suites de testes previamente salvas pelo usuario(soh o nome das suites).
	 * Retorna uma lista vazia se nao achar nenhuma suite de testes salva
	 * @return lista com os nomes das suites de testes jah salvas.
	 */
	public LinkedList<String> listarTestesSalvos()
	{
		LinkedList<String> listaTestesSalvos = new LinkedList<String>();
		File pastaDeTestesSalvos = new File("testesTestboot");
		File[] arquivosDeTesteSalvos = pastaDeTestesSalvos.listFiles();
		if(arquivosDeTesteSalvos != null)
		{
			for(int i = 0; i < arquivosDeTesteSalvos.length; i++)
			{
				if(arquivosDeTesteSalvos[i].isFile())
				{
					//achamos um arquivo de teste salvo. pegaremos seu nome...
					String nomeArquivoDeTesteSalvo = arquivosDeTesteSalvos[i].getName();
					//o nomedo arquivo tem extensao .txt vamos tirar sua extensao para a listagem...
					String nomeArquivoDeTesteSemTxt = nomeArquivoDeTesteSalvo.replace(".txt", "");
					listaTestesSalvos.add(nomeArquivoDeTesteSemTxt);
				}
			}
		}
		return listaTestesSalvos;
	}

	@Override
	public void deletarTesteSalvo(String nomeArquivoTeste) 
	{
		File arquivoTesteASerDeletado = new File("testesTestboot/" + nomeArquivoTeste + ".txt");
		arquivoTesteASerDeletado.delete();
		
		File arquivoConfiguracoesTesteASerDeletado = new File("configuracoesTestboot/" + nomeArquivoTeste + "config.txt");
		arquivoConfiguracoesTesteASerDeletado.delete();
	}
	
	public boolean projetoDeTestesComEsseNomeJahExiste(String nomeProjetoDeTestes)
	{
		return this.salvaCasosDeTestes.projetoDeTestesJahExiste(nomeProjetoDeTestes);
	}

	@Override
	public void escreverProjetoDeTestesComMain(
			DadosProjetoDeTestesComMain projetoDeTestessalvar) 
	{
		this.salvaCasosDeTestes.escreverProjetoDeTestesComMain(projetoDeTestessalvar);
		
	}

	@Override
	public DadosProjetoDeTestesComMain lerProjetoDeTestesComMain(
			String nomeProjetoDeTestes) {
		return this.salvaCasosDeTestes.lerProjetoDeTestesComMain(nomeProjetoDeTestes);
	}

	@Override
	public boolean projetoDeTestarMainComEsseNomeJahExiste(String nomeDoProjeto) {
		String nomeProjetoMain = nomeDoProjeto + "(main)";
		return this.salvaCasosDeTestes.projetoDeTestesJahExiste(nomeProjetoMain);
	}
	
	
	
	

}
